# -*-coding:utf-8-*-
#需要下列库：bs4，jieba，wordcloud
import urllib.request
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from scipy.misc import imread
import jieba


###############抓取豆瓣评论#################################
def getHtml(url):
    #"""获取url页面"""
    #headers为http请求报头
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
    req = urllib.request.Request(url,headers=headers)#发送并接受报文
    req = urllib.request.urlopen(req)
    content = req.read().decode('utf-8')

    return content


def getComment(url):
    #"""解析HTML页面"""   获取页面中评论地址
    html = getHtml(url)
    soupComment = BeautifulSoup(html, 'html.parser')#创建bs库对象

    comments = soupComment.findAll('span', 'short')#使用bs库对象处理文本
    onePageComments = []
    for comment in comments:
        # print(comment.getText()+'\n')
        onePageComments.append(comment.getText()+'\n')

    return onePageComments


if __name__ == '__main__':
    f = open('哪吒之魔童降世.txt', 'w', encoding='utf-8') #以写文件的方式打开“哪吒之魔童降世.txt”，如果不存在，会自动创建
    for page in range(10):  # 豆瓣爬取多页评论需要验证。
        url = 'https://movie.douban.com/subject/26794435/comments?start=' + str(20*page) + '&limit=20&sort=new_score&status=P'
        print('第%s页的评论:' % (page+1))#进入具体的评论地址，并抓取评论
        print(url + '\n')

        for i in getComment(url):
            f.write(i)#i为评论内容
            #print(i)
        print('\n')



###############分析豆瓣评论#################################

text = open("哪吒之魔童降世.txt","rb").read()
#调用结巴分词库对文本进行分词处理
wordlist = jieba.cut(text,cut_all=True)
wl = " ".join(wordlist)

#设置词云
wc = WordCloud(background_color = "white", #设置背景颜色
               mask = imread('shen.jpg'),  #设置背景图片
               max_words = 2000, #设置最大显示的字数
               stopwords = ["的", "这种", "这样", "还是", "就是", "这个"], #设置停用词
               font_path = "C:\Windows\Fonts\simkai.ttf",  # 设置为楷体 常规
        #设置中文字体，使得词云可以显示（词云默认字体是“DroidSansMono.ttf字体库”，不支持中文）
               max_font_size = 60,  #设置字体最大值
               random_state = 30, #设置有多少种随机生成状态，即有多少种配色方案
    )
myword = wc.generate(wl)#生成词云
wc.to_file('result.jpg')

#展示词云图
plt.imshow(myword)
plt.axis("off")
plt.show()









